package zdy.web.orm;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import org.apache.tomcat.jdbc.pool.DataSource;
import org.apache.tomcat.jdbc.pool.PoolProperties;

public class JDBCPool {
  /*1 、 加载tomcatpool 属性
   *2、 有个方法 获取连接池中的链接
   * */
	private static DataSource dataSource ;
	static {
		    PoolProperties p = new PoolProperties();  //池管理对象实例化  
	        p.setUrl("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8"); //设置url  
	        p.setDriverClassName("com.mysql.jdbc.Driver");//设置驱动  
	        p.setUsername("root");//设置用户名  
	        p.setPassword("root");//设置密码  
	        p.setJmxEnabled(true);//设置java管理扩展是否可用 是否支持JMX  
	        p.setTestWhileIdle(false);//设置空闲是否可用  空闲对象回收器开启状态  
	        p.setTestOnBorrow(true);//取回连接对链接有效性进行检查    在borrow一个池实例时，是否提前进行池操作；如果为true，则得到的池实例均是可用的；   
	        p.setTestOnReturn(false);//测试连接是否有返回  
	        p.setValidationQuery("SELECT 1");//验证连接有效性的方式，这步不能省 测试连接语句  
	        p.setValidationInterval(30000);//验证间隔时间  
	        //timeBetweenEvictionRunsMillis 和 minEvictableIdleTimeMillis，   
	        //他们两个配合，可以持续更新连接池中的连接对象，  
	        //当timeBetweenEvictionRunsMillis 大于0时，每过timeBetweenEvictionRunsMillis 时间，  
	        //就会启动一个线程，校验连接池中闲置时间超过minEvictableIdleTimeMillis的连接对象。  
	        p.setTimeBetweenEvictionRunsMillis(30000);   
	        p.setMinEvictableIdleTimeMillis(30000);  
	  
	        p.setMaxActive(100);//连接池最大并发容量     
	        p.setInitialSize(10);//初始化连接池时,创建连接个数  
	        p.setMaxWait(10000);//超时等待时间以毫秒为单位   
	        p.setRemoveAbandonedTimeout(60);//超时时间(以秒数为单位)  
	        p.setMaxIdle(100);// 最大空闲连接数   
	        p.setMinIdle(10);//最小空闲连接数  
	        p.setLogAbandoned(true); //是否在自动回收超时连接的时候打印连接的超时错误  
	        p.setRemoveAbandoned(true);//是否自动回收超时连接  
	          
	        //設置jdbc拦截器  
	        p.setJdbcInterceptors("org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;"+  
	                              "org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer");  
	        dataSource = new DataSource();//TOMCAT 的数据源  
	        dataSource.setPoolProperties(p); //池与数据源绑定    
	}
	public  static Connection getConnection() {
		Connection con = null;          
        try {                
            con = dataSource.getConnection();             
              
        } catch (SQLException e) {  
            e.printStackTrace();  
            return null;
        }  
        return con;
	}
	
}
